/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package generadorcommun;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Martin
 */
public class CrearProyecto {

    private static CrearProyecto instance;

    private CrearProyecto() {
    }

    public static CrearProyecto getInstance() {
        if (instance == null) {
            instance = new CrearProyecto();
        }
        return instance;
    }

    public void crearCarpetas(String nombre) {
        File privado = new File("c:\\" + nombre + "\\nbproject\\private");
        File nom = new File("c:\\" + nombre + "\\src\\" + nombre);
        File test = new File("c:\\" + nombre + "\\test");
        privado.mkdirs();
        nom.mkdirs();
        test.mkdir();
    }

    public void concatenarList(List<String> principal, List<String> secundario) {
        for (String linea : secundario) {
            principal.add(linea);
        }
    }

    public String sustituir(String texto, String sustituir) {
        String aux = "";
        for (char c : texto.toCharArray()) {
            if (c == '%') {
                aux = aux + sustituir;
            } else {
                aux = aux + c;
            }
        }
        return aux;
    }

    public File darDirBuild(int i) {
        File dir = null;
        switch (i) {
            case 1:
                dir = new File("TXTGENERADOR/build_1.txt");
                break;
            case 2:
                dir = new File("TXTGENERADOR/build_2.txt");
                break;
            case 3:
                dir = new File("TXTGENERADOR/build_3.txt");
                break;
            case 4:
                dir = new File("TXTGENERADOR/build_4.txt");
                break;
            case 5:
                dir = new File("TXTGENERADOR/build_5.txt");
                break;
            case 6:
                dir = new File("TXTGENERADOR/build_6.txt");
                break;
        }
        return dir;
    }

    public void crearBuild(String nombre) throws IOException {
        List<String> archivo = new ArrayList<String>();
        for (int i = 1; i <= 6; i++) {
            if (i == 2 || i == 3 || i == 5) {
                archivo.add(sustituir(GuardarArchivo.getInstance().leerTxt(darDirBuild(i)).get(0), nombre));
            } else {
                concatenarList(archivo, GuardarArchivo.getInstance().leerTxt(darDirBuild(i)));
            }
        }
        File build = new File("c:/" + nombre + "/build.xml");
        GuardarArchivo.getInstance().persistirProyecto(archivo, build);
    }

    public void crearManiFest(String nombre) throws IOException {
        File dir = new File("TXTGENERADOR/manifest.txt");
        List<String> archivo = GuardarArchivo.getInstance().leerTxt(dir);
        File maniFest = new File("c:/" + nombre + "/manifest.mf");
        GuardarArchivo.getInstance().persistirProyecto(archivo, maniFest);
    }

    public File darDirProject(int i) {
        File dir = null;
        switch (i) {
            case 1:
                dir = new File("TXTGENERADOR/project_1.txt");
                break;
            case 2:
                dir = new File("TXTGENERADOR/project_2.txt");
                break;
            case 3:
                dir = new File("TXTGENERADOR/project_3.txt");
                break;
        }
        return dir;
    }

    public void crearProject(String nombre) throws IOException {
        List<String> archivo = new ArrayList<String>();
        for (int i = 1; i <= 3; i++) {
            if (i == 2) {
                archivo.add(sustituir(GuardarArchivo.getInstance().leerTxt(darDirProject(i)).get(0), nombre));
            } else {
                concatenarList(archivo, GuardarArchivo.getInstance().leerTxt(darDirProject(i)));
            }
        }
        File projecto = new File("c:/" + nombre + "/nbproject/project.xml");
        GuardarArchivo.getInstance().persistirProyecto(archivo, projecto);
    }

    public File darDirBuildImpl(int i) {
        File dir = null;
        switch (i) {
            case 1:
                dir = new File("TXTGENERADOR/build-impl_1.txt");
                break;
            case 2:
                dir = new File("TXTGENERADOR/build-impl_2.txt");
                break;
            case 3:
                dir = new File("TXTGENERADOR/build-impl_3.txt");
                break;
            case 4:
                dir = new File("TXTGENERADOR/build-impl_4.txt");
                break;
            case 5:
                dir = new File("TXTGENERADOR/build-impl_5.txt");
                break;
            case 6:
                dir = new File("TXTGENERADOR/build-impl_6.txt");
                break;
            case 7:
                dir = new File("TXTGENERADOR/build-impl_7.txt");
                break;
        }
        return dir;
    }

    public void crearBuildImpl(String nombre) throws IOException {
        List<String> archivo = new ArrayList<String>();
        for (int i = 1; i <= 7; i++) {
            if (i == 2 || i == 4 || i == 6) {
                archivo.add(sustituir(GuardarArchivo.getInstance().leerTxt(darDirBuildImpl(i)).get(0), nombre));
            } else {
                concatenarList(archivo, GuardarArchivo.getInstance().leerTxt(darDirBuildImpl(i)));
            }
        }
        File buildImpl = new File("c:/" + nombre + "/nbproject/build-impl.xml");
        GuardarArchivo.getInstance().persistirProyecto(archivo, buildImpl);
    }

    public File darDirProjectProp(int i) {
        File dir = null;
        switch (i) {
            case 1:
                dir = new File("TXTGENERADOR/projectP_1.txt");
                break;
            case 2:
                dir = new File("TXTGENERADOR/projectP_2.txt");
                break;
            case 3:
                dir = new File("TXTGENERADOR/projectP_3.txt");
                break;
        }
        return dir;
    }

    public void crearProjectProp(String nombre) throws IOException {
        List<String> archivo = new ArrayList<String>();
        for (int i = 1; i <= 3; i++) {
            if (i == 2 || i == 4 || i == 6) {
                archivo.add(sustituir(GuardarArchivo.getInstance().leerTxt(darDirProjectProp(i)).get(0), nombre));
            } else {
                concatenarList(archivo, GuardarArchivo.getInstance().leerTxt(darDirProjectProp(i)));
            }
        }
        File projectProp = new File("c:/" + nombre + "/nbproject/project.properties");
        GuardarArchivo.getInstance().persistirProyecto(archivo, projectProp);
    }

    public void crearGenfiles(String nombre) throws IOException {
        File dir = new File("TXTGenerador/genfiles.txt");
        List<String> archivo = GuardarArchivo.getInstance().leerTxt(dir);
        File genfiles = new File("c:/" + nombre + "/nbproject/genfiles.properties");
        GuardarArchivo.getInstance().persistirProyecto(archivo, genfiles);
    }

    public void crearMain(String nombre) throws IOException {
        File dir1 = new File("TXTGenerador/main.txt");
        File dir2 = new File("TXTGenerador/main_2.txt");
        List<String> main = new ArrayList<String>();
        main.add(sustituir(GuardarArchivo.getInstance().leerTxt(dir1).get(0), nombre));
        concatenarList(main, GuardarArchivo.getInstance().leerTxt(dir2));
        GuardarArchivo.getInstance().persistirClase(main, "Main", nombre,"CLASS");
    }

    public File darDirDataBase(int i) {
        File dir = null;
        switch (i) {
            case 1:
                dir = new File("TXTGENERADOR/database_1.txt");
                break;
            case 2:
                dir = new File("TXTGENERADOR/database_2.txt");
                break;
            case 3:
                dir = new File("TXTGENERADOR/database_3.txt");
                break;
            case 4:
                dir = new File("TXTGENERADOR/database_4.txt");
                break;
            case 5:
                dir = new File("TXTGENERADOR/database_5.txt");
                break;
            case 6:
                dir = new File("TXTGENERADOR/database_6.txt");
                break;
        }
        return dir;
    }

    public void crearDataBase(String nombreProy,String url,String user,String pass) throws IOException {
        List<String> archivo = new ArrayList<String>();
        for (int i = 1; i <= 6; i++) {
            if (i == 1) {
                archivo.add(sustituir(GuardarArchivo.getInstance().leerTxt(darDirDataBase(i)).get(0), nombreProy));
            }else if (i==3){
                archivo.add(sustituir(GuardarArchivo.getInstance().leerTxt(darDirDataBase(i)).get(0), url));
            }else if (i==4){
                archivo.add(sustituir(GuardarArchivo.getInstance().leerTxt(darDirDataBase(i)).get(0), user));
            }else if (i==5){
                archivo.add(sustituir(GuardarArchivo.getInstance().leerTxt(darDirDataBase(i)).get(0), pass));
            } else {
                concatenarList(archivo, GuardarArchivo.getInstance().leerTxt(darDirDataBase(i)));
            }
        }
        GuardarArchivo.getInstance().persistirClase(archivo, "DataBase", nombreProy,"CLASS");
    }

    public void crearProyecto(String nombre) throws IOException, SQLException {
        DataBase.getInstance().crearDataBase(nombre);
        crearCarpetas(nombre);
        crearBuild(nombre);
        crearManiFest(nombre);
        crearProject(nombre);
        crearBuildImpl(nombre);
        crearProjectProp(nombre);
        crearGenfiles(nombre);
        crearMain(nombre);
        crearDataBase(nombre, DataBase.getInstance().getUrl()+nombre, DataBase.getInstance().getUser(), DataBase.getInstance().getPass());
        GuardarArchivo.getInstance().guardarProyectos(nombre);
    }
}
